﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media.Imaging;
using LinkShareWpf.Properties;
using System.IO;

namespace LinkShareWpf.Converters
{
    public class StringToImageConverter : IValueConverter
    {
        #region IValueConverter Members
        // value è il valore che ci interessa convertire, in questo caso la Striga, il Source del Binding
        // targetType è il il tipo del Target
        // parameter è il parametro che passiamo
        // culture è la nazionalizzazione
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (!string.IsNullOrEmpty(value as string))
            {
                string photolocation = string.Empty;

                // Costruisco il percorso da cui prelevare l'immagine
                // a seconda dello UserControl che ha lanciato il comando di show
                if ((parameter as Type) == typeof(LinkShareWpf.ViewModel.NetworkResourceViewModel))
                    photolocation = Settings.Default.CoversPath + @"\Temp\" + value;
                else
                    photolocation = Settings.Default.CoversPath + @"\" + value;

                //Creo l'oggetto immagine da visualizzare
                BitmapImage bitmap = new BitmapImage();

                // I metodi BeginInit ed EndInit della classe BitmapImage implementano l'interfaccia ISupportInitialize
                // e servono a segnalare l'avvio e il termine dell'inizializzazione dell'oggetto
                bitmap.BeginInit();
                try
                {
                    // Un oggetto MemoryStream è un flusso senza buffer
                    // che incapsula dati accessibili direttamente in memoria.
                    // Tale flusso non ha archivio di backup e può risultare utile come buffer temporaneo.
                    bitmap.StreamSource = new MemoryStream(File.ReadAllBytes(photolocation));
                }
                catch (Exception exception)
                {
                    Console.WriteLine("StringToImageConverter.Convert( ... ):\n" + exception.Message + "\n" + exception.InnerException);
                    return null;
                }
                bitmap.EndInit();
                return bitmap;
            }
            else
                return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}